#ifndef TOOLS_H
#define TOOLS_H
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <getch.h>
#include <time.h>
#define RESET_PASSWORD "123456"//初始密码
#define MAX_NUMBER 10000//最大成员数
#define SUPERPASSWORD "19990323"//超级管理员密码
#define true 1
#define false 0
#define WAIT(x) sleep(x)
#define CLC system("clear")
typedef struct Visitor
{
	char name[20];//姓名
	char sex;//性别
	float grade[3];//成绩
	bool issigned;//是否第一次注册
	bool enter_error;//账号是否冻结
	int id;//学工号
	char password[16];//密码
	char level;//身份
}Visitor;
extern Visitor *p;//申请堆内存，存放登录信息
extern Visitor *v;//活跃指针
extern int exit_flag;//系统即将退出的标志
extern bool quit_flag;
/*******************************************************************************
							tools.h
*******************************************************************************/
char* Translate(const char ch);//翻译仅本段代码单个字符表达的含义
void Anykey(void);//按任意键返回
void Init(void);//进入界面的初始化（可以在其中申请堆内存）
void Exit(void);//退出并释放堆内存
char Higherlevel(const char level);//返回当前等级高一级的身份
char Lowerlevel(const char level);//返回当前等级低一级的身份
bool Findid(const int id);//根据输入的id查询列表中是否存在该学工号
char* Findpassword(const int id);//根据输入的id返回对应id的密码
Visitor* Findmember(const int id);//根据输入的id查询并返回该成员在所有成员中地址
Visitor* Findname(const char* name);//输入姓名返回其在所有成员中的地址
int Getgroupnumber(const char cmd);//统计一类权限成员的总人数（当cmd=‘o’时为统计全员数量）
bool Levelcmp(const char level1,const char level2);//比较两个输入的权限大小，前者比后者大，则返回true
bool Islegal(char* password);//判断一个作为密码的字符串是否合法，如果合法则返回true
bool Samename(const char *name);//检查是否有相同名字
void Full(Visitor *dest,const char level);//将只注册了姓名和性别的账号补齐
void Samefind(const char* name);//相似查找
char* Contains(const char *str1,const char *str2);//判断str1是否包含str2
void Displayonemsg(const int id,const char level);//显示单个信息,输入学工号显示对应信息
void Displaystu(const int id);//显示学生的信息
void Readsigninmsg(const char *filename);//	读取注册表信息
void Writesigninmsg(const char *filename,Visitor *dest);//将注册信息写入注册表中
void Modifysigninmsg(const char *filename,Visitor *dest,const int row);//修改文件某一行
int getFilesLine(const char *filename);//获取文件行数
int getCurrentIndex(const int id);//获取当前地址下标
#endif//TOOLS_H
